Skip to content

Upgrade library to AGP 9+#90

Merged
HeyPouya merged 3 commits intomasterfrom
feature/upgrade-to-agp-9
Mar 21, 2026
Merged

Upgrade library to AGP 9+#90
HeyPouya merged 3 commits intomasterfrom
feature/upgrade-to-agp-9

Conversation

@HeyPouya
Copy link
Owner

@HeyPouya HeyPouya commented Mar 20, 2026

Update Gradle to version 9.4.0, and enhance ProGuard rules

Summary by CodeRabbit

  • New Features
    • New DSL builders for simpler dialog and store configuration (Fragment + Compose).
  • Documentation
    • Major README overhaul: Quick Start, Features, DSL examples, configuration reference, sample app, and full license.
  • Bug Fixes
    • Fixed download utility import issues and improved store-opening error handling.
  • Improvements
    • Better download progress/failure handling, immutable dialog models, and consistent theme defaults.
  • Chores
    • Added consumer ProGuard rules and updated build/tooling and version metadata.

@HeyPouya HeyPouya self-assigned this Mar 20, 2026
@coderabbitai
Copy link

coderabbitai bot commented Mar 20, 2026

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: e0624b1f-0723-4a90-b1a8-716f5fa17630

📥 Commits

Reviewing files that changed from the base of the PR and between 4d484e1 and d32fd3d.

📒 Files selected for processing (1)
  • gradle.properties

Walkthrough

Refactors DSL builders to explicit builders and immutable models; migrates many Parcelable implementations to @Parcelize; splits ViewModel persistent UI state from one-shot side effects; fixes package typos (donwloadapk → downloadapk); updates Gradle/tooling, adds consumer ProGuard rules, and expands README/KDoc.

Changes

Cohort / File(s) Summary
Documentation & README
README.md
Rebranded repo references, restructured content (Features, Quick Start, DSL Builders, Configuration), updated install/dependency examples, renamed sample vars, and added full Apache 2.0 license text.
Project build & tooling
build.gradle.kts, app/build.gradle.kts, gradle/libs.versions.toml, gradle/wrapper/gradle-wrapper.properties, gradle/gradle-daemon-jvm.properties, settings.gradle.kts, gradle.properties
Bumped AGP/Kotlin/Gradle versions, removed kotlin Android plugin alias, added kotlin-parcelize, moved JVM toolchain config, added Foojay resolver and daemon JVM properties, and bumped published POM version.
Build convention plugin
build-logic/convention/.../AndroidLibraryPlugin.kt
Apply kotlin.parcelize, add consumerProguardFiles("consumer-rules.pro"), switch Android DSL import, and remove explicit toolchain JVM config.
DSL builders (Fragment & Compose)
appupdater/.../dsl/DSLUtils.kt, compose/.../dsl/DSLUtils.kt
Introduce mutable builder classes (StoreListItemBuilder, DirectDownloadListItemBuilder, UpdaterDialogDataBuilder) and change top-level DSL functions to use builders with validation and defaults.
Model immutability & parcelize
appupdater/.../UpdaterDialogData.kt, appupdater/.../UpdaterFragmentModel.kt, directdownload/.../DirectDownloadListItem.kt, store/.../StoreListItem.kt
Convert mutable var properties to val; replace manual Parcelable implementations with @Parcelize and remove parcel boilerplate.
Store implementations
store/.../stores/*.kt
Migrate ~16 store classes from manual Parcelable boilerplate to @Parcelize (preserve packageName and AppStore behavior).
ViewModel & state flow
appupdater/.../AppUpdaterViewModel.kt, compose/.../AndroidAppUpdaterViewModel.kt
Replace single MutableStateFlow of DialogScreenStates with a persistent DialogScreenUiState StateFlow and a Channel<DialogScreenStates> for one-shot side effects; update intent handling and download-progress mapping.
Dialog/UI updates
appupdater/.../AppUpdaterDialog.kt, compose/.../AndroidAppUpdaterScreen.kt
Fix import typos (donwloadapkdownloadapk), split collectors into persistent state vs side-effects, adjust KDoc/formatting and trailing commas.
Adapters & view holders
appupdater/.../adapters/DirectRecyclerAdapter.kt, .../StoresRecyclerAdapter.kt
Rename internal ViewHolder types (SoresViewHolderDirectDownloadViewHolder / StoresViewHolder) and update adapter generics; binding logic unchanged.
Package path fixes (downloadapk)
directdownload/.../utils/donwloadapkdirectdownload/.../utils/downloadapk and related tests/receiver
Correct package declarations and imports across runtime and test files.
Download domain & errors
directdownload/.../domain/DownloadState.kt, store/.../AppStoreCallback.kt
Add DownloadState.Failed(reason: String?); change AppStoreCallback.Failure.exception type to generic Exception; add/adjust KDoc.
Permission & utility renames
directdownload/.../permission/*, appupdater/.../ErrorCallbackHolder.kt
Rename DownloadAPKPermissionForOAndBellowDownloadAPKPermissionForOAndBelow, small refactors/formatting, remove unused Typeface import, and update KDoc.
Store domain docs & safety
store/.../{StoreFactory,StoreIntentBuilder,StoreManager,AppStore,AppStoreType}.kt
Add/expand KDoc, validate null context in showAppInSelectedStore (invoke Failure callback if null).
ProGuard / consumer rules
appupdater/consumer-rules.pro, compose/consumer-rules.pro, directdownload/consumer-rules.pro, store/consumer-rules.pro
Add consumer ProGuard/R8 rules to preserve public API entry points, DSL packages, model classes, Parcelable CREATORs, and manifest-reflected types.
Tests
appupdater/.../AppUpdaterViewModelTest.kt, directdownload/.../tests/*
Update tests to assert side effects via viewModel.sideEffect instead of screenState; fix package declarations and test names to match renames.
Demo constant
app/src/main/.../Constants.kt
Update demo APK_URL constant to a new APKPure URL.

Sequence Diagram(s)

sequenceDiagram
  %% rectangles colored with rgba( ) 0.5 alpha are not used here; focus on interactions
  participant UI as Android UI (Dialog / Compose)
  participant VM as AppUpdaterViewModel
  participant Side as SideEffect Channel
  participant DD as DirectDownloadManager
  participant Receiver as DownloadFinishedReceiver

  UI->>VM: user triggers download or open-store
  VM->>Side: emit one-shot DialogScreenStates (DownloadApk / OpenStore / InstallApk / ExecuteErrorCallback)
  Side-->>DD: side-effect consumer invokes download/open action
  DD->>Receiver: system download enqueued
  Receiver->>VM: notify download finished (Downloaded / Failed)
  VM->>UI: update persistent screenState (Idle / UpdateInProgress) via screenState StateFlow
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

  • Upgrade library to AGP 9+ #90: Directly related — overlaps on AGP/tooling bumps, parcelize migration, DSL refactors, ViewModel side-effect split, consumer ProGuard rules, and README updates.
  • Add AndroidLibraryPlugin #82: Related — touches build-logic AndroidLibraryPlugin and Gradle plugin/toolchain configuration changes mirrored in this PR.

Poem

🐰 A hop through code with careful paws,
Builders bloom and parcelize laws.
Side effects sorted, state held tight,
Typos fixed and toolchains right.
I nibble docs and leave a cheerful trace — hooray, what a graceful refactor race! 🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 14.77% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Upgrade library to AGP 9+' accurately reflects the primary change in the changeset, which is a comprehensive upgrade to Android Gradle Plugin 9.1.0 and related build tooling/dependencies.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/upgrade-to-agp-9

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 18

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@app/build.gradle.kts`:
- Around line 36-38: The kotlin {} block requires the Kotlin Android plugin to
be applied; add alias(libs.plugins.jetbrainsKotlinAndroid) to the plugins block
alongside alias(libs.plugins.androidApplication) and
alias(libs.plugins.compose.compiler) so the org.jetbrains.kotlin.android plugin
is applied for the kotlin { jvmToolchain(17) } configuration, and ensure
gradle/libs.versions.toml defines the plugin alias as jetbrainsKotlinAndroid = {
id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } so
libs.plugins.jetbrainsKotlinAndroid resolves.

In `@appupdater/src/main/java/com/pouyaheydari/appupdater/main/dsl/DSLUtils.kt`:
- Around line 13-55: Extract the duplicated builder classes StoreListItemBuilder
and DirectDownloadListItemBuilder into a shared module (e.g., :store or
:dsl-core) and replace the duplicate implementations in the Compose and Fragment
DSL modules with imports from that shared module; update the build system
(module dependency) and package/imports so UpdaterDialogDataBuilder continues to
reference the shared StoreListItemBuilder/DirectDownloadListItemBuilder types
and ensure the shared builders still produce StoreListItem and
DirectDownloadListItem with the same property names (store, title, icon, url)
and build() signatures.
- Around line 14-20: Replace the lateinit store property in StoreListItemBuilder
with a nullable var (store: AppStore? = null) and add explicit validation in
build(): check that store is not null and throw a clear IllegalStateException
(e.g., "StoreListItemBuilder.store must be set") before constructing
StoreListItem; update the build() method to use the validated non-null store
when calling StoreListItem(store = ..., title = title, icon = icon) so callers
get a helpful error instead of UninitializedPropertyAccessException.

In
`@appupdater/src/main/java/com/pouyaheydari/appupdater/main/ui/AppUpdaterDialog.kt`:
- Around line 139-144: Remove the unused sealed variants
DialogScreenStates.Empty, DialogScreenStates.ShowUpdateInProgress, and
DialogScreenStates.HideUpdateInProgress from the sealed interface definition in
DialogScreenStates (delete their enum/variant declarations) and delete the dead
when-branch in AppUpdaterDialog.kt that matches those three cases (the branch
containing the comment "handled by screenState"). After removal, search for any
remaining references to those symbols (e.g., usages in other files or imports)
and clean them up, then run a build to ensure no unresolved references remain.

In
`@appupdater/src/main/java/com/pouyaheydari/appupdater/main/ui/AppUpdaterViewModel.kt`:
- Around line 41-48: In AppUpdaterViewModel where DialogScreenIntents are mapped
to _sideEffect.trySend (for cases like DialogScreenIntents.OnDirectLinkClicked,
OnStoreClicked, OnOpeningStoreFailed producing DialogScreenStates.DownloadApk,
OpenStore, ExecuteErrorCallback), handle the trySend result: inspect the
ChannelResult (use onFailure or check isFailure) and either log the failure
(include a TAG and context such as which DialogScreenState failed) or switch to
calling send() from a coroutine scope for critical events (e.g., DownloadApk) so
failures are not dropped silently.

In
`@appupdater/src/main/java/com/pouyaheydari/appupdater/main/ui/model/UpdaterDialogData.kt`:
- Around line 21-28: UpdaterDialogData was changed to immutable by turning its
public properties (title, description, storeList, directDownloadList,
isForceUpdate, typeface, errorWhileOpeningStoreCallback, theme) into vals, which
is a breaking API change for callers that mutate the instance; restore the
original mutability by making those properties vars again on the
UpdaterDialogData data class (or alternatively provide explicit copy/with or
builder APIs preserving binary compatibility) so existing consumers that set
properties after construction continue to work.

In `@compose/src/main/java/com/pouyaheydari/appupdater/compose/dsl/DSLUtils.kt`:
- Around line 13-19: The builder currently uses lateinit var store which causes
an UninitializedPropertyAccessException if unset; change store to a nullable var
store: AppStore? = null in StoreListItemBuilder and add an explicit validation
in build() (e.g., requireNotNull(store) { "StoreListItemBuilder.store must be
set before build()" }) before constructing and returning StoreListItem (use the
non-null value after validation). This provides a clear error message and avoids
lateinit.
- Around line 24-29: The builder DirectDownloadListItemBuilder currently allows
title and url to remain empty; update build() to validate required fields (title
and url) before constructing DirectDownloadListItem: check that title is not
blank and url is a non-empty/valid string (or matches a simple URL pattern) and
throw a clear IllegalStateException or IllegalArgumentException if validation
fails, so callers get an early, descriptive error instead of creating an invalid
DirectDownloadListItem.

In
`@directdownload/src/main/kotlin/com/pouyaheydari/appupdater/directdownload/data/DirectDownloadListItem.kt`:
- Around line 13-15: The data class DirectDownloadListItem changed its public
properties title and url from var to val which removes setters and is a breaking
API/ABI change; restore compatibility by making the properties mutable again
(use var for title and url on DirectDownloadListItem) so existing consumers and
generated setters remain available, ensuring the public API surface is
unchanged.

In
`@directdownload/src/main/kotlin/com/pouyaheydari/appupdater/directdownload/utils/downloadapk/APKFileProvider.kt`:
- Line 1: The package rename changed the FQCN of the public interface
APKFileProvider and will break downstream imports; restore a temporary
compatibility shim by adding a deprecated typealias named APKFileProvider in the
old package that aliases the new APKFileProvider (so existing imports still
resolve), annotate it with `@Deprecated` with a message pointing to the new
package/FQCN and a ReplaceWith suggestion, and keep the shim for at least one
release before removal to give users time to migrate.

In
`@directdownload/src/main/kotlin/com/pouyaheydari/appupdater/directdownload/utils/downloadapk/DownloadAPKHelper.kt`:
- Line 1: The package rename changed the FQN of checkPermissionsAndDownloadApk
and will break existing consumers; restore a deprecated compatibility wrapper in
the old package by adding a new file in the previous package namespace
(utils.donwloadapk) that declares a public function
checkPermissionsAndDownloadApk annotated `@Deprecated` which simply forwards its
parameters to the relocated implementation (the new
checkPermissionsAndDownloadApk) and re-exports any needed types, and include a
deprecation message pointing callers to the new package and note removal in the
next release.

In `@gradle/libs.versions.toml`:
- Around line 6-7: The agp version declared as agp = "9.1.0" in
libs.versions.toml is invalid; update the agp entry to a real released Android
Gradle Plugin version (for example "2.3.0" or the intended target) by replacing
the value for the agp key, then verify resolution against Maven Central and that
the Gradle wrapper (9.4.0) and Kotlin (kotlin = "2.3.20") remain compatible;
after changing the agp value, run a Gradle sync/build to ensure the plugin
resolves correctly.

In `@README.md`:
- Line 155: Update the two heading lines "Fragment DSL" and "Compose DSL" to use
one-level deeper headings (change from #### to ###) so they correctly follow the
parent "DSL Builders" (which is ##) and comply with MD001; locate the headings
by their exact text ("Fragment DSL" and "Compose DSL") in README.md and replace
the four-hash markers with three-hash markers.
- Line 2: The image tag(s) in README.md are missing alt text; update each <img>
element (e.g., the <img
src="https://raw.githubusercontent.com/HeyPouya/AndroidAppUpdater/master/pics/icon.png"
width="250">) to include a descriptive alt attribute (for example alt="Android
App Updater icon" or equivalent) to satisfy accessibility/MD045 requirements and
apply the same change to the other image(s).
- Around line 314-322: Update the fenced code block that starts with the line
"AndroidAppUpdater/" so the opening triple backticks include a language
identifier (e.g., change ``` to ```text) to satisfy MD040; locate the block
containing the ASCII architecture diagram (the lines showing
"AndroidAppUpdater/" and its subdirectories) and add the identifier to the
opening ``` only.

In
`@store/src/main/java/com/pouyaheydari/appupdater/store/domain/StoreIntentBuilder.kt`:
- Around line 26-28: In Builder.withPackage (the function that sets
storePackageName) the require message has a typo "most" — update the exception
string to read "must not be empty" (i.e., change the require message for
storePackageName in withPackage to "Store's package name must not be empty") so
the validation message is correct; locate the require(...) call in
Builder.withPackage and replace the message accordingly.

In
`@store/src/main/java/com/pouyaheydari/appupdater/store/domain/StoreListItem.kt`:
- Around line 15-18: The default for StoreListItem.icon was changed to 0 which
breaks previews/tests that relied on the previous drawable default; update any
preview/test instantiations of StoreListItem to pass an explicit drawable
resource (e.g., R.drawable.appupdater_ic_cloud or another appropriate drawable)
when constructing StoreListItem, or alternatively revert/change the default in
the StoreListItem declaration; search for usages of StoreListItem in
preview/test files and add the icon argument to each call to restore the
expected icon behavior.

In
`@store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/NineApps.kt`:
- Around line 4-15: Add the Kotlin Parcelize plugin to every module that uses
`@Parcelize` (modules: store, directdownload, appupdater) so files like NineApps
(class NineApps in NineApps.kt) compile; update each module's Gradle settings to
apply the Kotlin parcelize plugin (the kotlin-parcelize /
org.jetbrains.kotlin.plugin.parcelize plugin) in the plugins block of that
module's build.gradle.kts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: aa7b2ed7-9ddd-4b2b-bdd4-5aad6589f9cb

📥 Commits

Reviewing files that changed from the base of the PR and between 42eb560 and 8b500a3.

📒 Files selected for processing (64)
  • README.md
  • app/build.gradle.kts
  • appupdater/consumer-rules.pro
  • appupdater/src/main/java/com/pouyaheydari/appupdater/main/dsl/DSLUtils.kt
  • appupdater/src/main/java/com/pouyaheydari/appupdater/main/ui/AppUpdaterDialog.kt
  • appupdater/src/main/java/com/pouyaheydari/appupdater/main/ui/AppUpdaterViewModel.kt
  • appupdater/src/main/java/com/pouyaheydari/appupdater/main/ui/adapters/DirectRecyclerAdapter.kt
  • appupdater/src/main/java/com/pouyaheydari/appupdater/main/ui/adapters/StoresRecyclerAdapter.kt
  • appupdater/src/main/java/com/pouyaheydari/appupdater/main/ui/model/UpdaterDialogData.kt
  • appupdater/src/main/java/com/pouyaheydari/appupdater/main/ui/model/UpdaterFragmentModel.kt
  • appupdater/src/main/java/com/pouyaheydari/appupdater/main/utils/ErrorCallbackHolder.kt
  • appupdater/src/test/java/com/pouyaheydari/appupdater/main/ui/AppUpdaterViewModelTest.kt
  • build-logic/convention/src/main/java/com/pouyaheydari/appupdater/convention/plugins/AndroidLibraryPlugin.kt
  • build.gradle.kts
  • compose/consumer-rules.pro
  • compose/src/main/java/com/pouyaheydari/appupdater/compose/dsl/DSLUtils.kt
  • compose/src/main/java/com/pouyaheydari/appupdater/compose/ui/AndroidAppUpdaterScreen.kt
  • compose/src/main/java/com/pouyaheydari/appupdater/compose/ui/AndroidAppUpdaterViewModel.kt
  • compose/src/main/java/com/pouyaheydari/appupdater/compose/ui/models/UpdaterDialogData.kt
  • directdownload/consumer-rules.pro
  • directdownload/src/main/kotlin/com/pouyaheydari/appupdater/directdownload/data/DirectDownloadListItem.kt
  • directdownload/src/main/kotlin/com/pouyaheydari/appupdater/directdownload/domain/DownloadState.kt
  • directdownload/src/main/kotlin/com/pouyaheydari/appupdater/directdownload/receiver/DownloadFinishedReceiver.kt
  • directdownload/src/main/kotlin/com/pouyaheydari/appupdater/directdownload/utils/downloadapk/APKDownloadManager.kt
  • directdownload/src/main/kotlin/com/pouyaheydari/appupdater/directdownload/utils/downloadapk/APKFileProvider.kt
  • directdownload/src/main/kotlin/com/pouyaheydari/appupdater/directdownload/utils/downloadapk/APKFileProviderImpl.kt
  • directdownload/src/main/kotlin/com/pouyaheydari/appupdater/directdownload/utils/downloadapk/DownloadAPKHelper.kt
  • directdownload/src/main/kotlin/com/pouyaheydari/appupdater/directdownload/utils/downloadapk/DownloadManagerRequestCreator.kt
  • directdownload/src/main/kotlin/com/pouyaheydari/appupdater/directdownload/utils/permission/DownloadAPKPermissionFactory.kt
  • directdownload/src/main/kotlin/com/pouyaheydari/appupdater/directdownload/utils/permission/DownloadAPKPermissionForOAndBelow.kt
  • directdownload/src/test/kotlin/com/pouyaheydari/appupdater/directdownload/utils/downloadapk/APKDownloadManagerTest.kt
  • directdownload/src/test/kotlin/com/pouyaheydari/appupdater/directdownload/utils/downloadapk/APKFileProviderImplTest.kt
  • directdownload/src/test/kotlin/com/pouyaheydari/appupdater/directdownload/utils/downloadapk/DownloadAPKHelperKtTest.kt
  • directdownload/src/test/kotlin/com/pouyaheydari/appupdater/directdownload/utils/downloadapk/DownloadManagerRequestCreatorTest.kt
  • directdownload/src/test/kotlin/com/pouyaheydari/appupdater/directdownload/utils/permission/DownloadAPKPermissionFactoryTest.kt
  • directdownload/src/test/kotlin/com/pouyaheydari/appupdater/directdownload/utils/permission/DownloadAPKPermissionForOAndBelowTest.kt
  • gradle/gradle-daemon-jvm.properties
  • gradle/libs.versions.toml
  • gradle/wrapper/gradle-wrapper.properties
  • settings.gradle.kts
  • store/consumer-rules.pro
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/AppStoreCallback.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/StoreFactory.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/StoreIntentBuilder.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/StoreListItem.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/StoreManager.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/AmazonAppStore.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/AppStore.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/AppStoreType.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/Aptoide.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/CafeBazaarStore.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/FDroid.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/GooglePlayStore.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/HuaweiAppGallery.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/LenovoAppCenter.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/MiGetAppStore.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/MyketStore.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/NineApps.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/OneStoreAppMarket.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/OppoAppMarket.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/SamsungGalaxyStore.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/TencentAppStore.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/VAppStore.kt
  • store/src/main/java/com/pouyaheydari/appupdater/store/domain/stores/ZTEAppCenter.kt
💤 Files with no reviewable changes (1)
  • build.gradle.kts

@HeyPouya HeyPouya merged commit 7355a3d into master Mar 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant